

<!DOCTYPE html>
<html lang="zh" data-default-color-scheme=&#34;auto&#34;>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/walker_sue/img/favicon.png">
  <link rel="icon" type="image/png" href="/walker_sue/img/favicon.png">
  <meta name="viewport"
        content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="description" content="">
  <meta name="author" content="lk">
  <meta name="keywords" content="">
  <title>商业智能与推荐系统 - Walker_Sue</title>

  <link  rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.4.1/css/bootstrap.min.css" />


  <link  rel="stylesheet" href="https://cdn.staticfile.org/github-markdown-css/4.0.0/github-markdown.min.css" />
  <link  rel="stylesheet" href="/walker_sue/lib/hint/hint.min.css" />

  
    
    
      
      <link  rel="stylesheet" href="https://cdn.staticfile.org/highlight.js/10.0.0/styles/github-gist.min.css" />
    
  

  


<!-- 主题依赖的图标库，不要自行修改 -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_ba1fz6golrf.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_kmeydafke9r.css">


<link  rel="stylesheet" href="/walker_sue/css/main.css" />

<!-- 自定义样式保持在最底部 -->


  <script  src="/walker_sue/js/utils.js" ></script>
  <script  src="/walker_sue/js/color-schema.js" ></script>
<meta name="generator" content="Hexo 5.3.0"></head>


<body>
  <header style="height: 70vh;">
    <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand"
       href="/walker_sue/">&nbsp;<strong>Walker</strong>&nbsp;</a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/walker_sue/">
                <i class="iconfont icon-home-fill"></i>
                主页
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/walker_sue/archives/">
                <i class="iconfont icon-archive-fill"></i>
                归档
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/walker_sue/categories/">
                <i class="iconfont icon-category-fill"></i>
                分类
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/walker_sue/tags/">
                <i class="iconfont icon-tags-fill"></i>
                标签
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/walker_sue/about/">
                <i class="iconfont icon-user-fill"></i>
                关于
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item dropdown">
              <a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                <i class="iconfont icon-books"></i>
                文档
              </a>
              <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                
                  
                  
                  
                  <a class="dropdown-item" target="_blank" rel="noopener" href="https://hexo.fluid-dev.com/">
                    
                    主题博客
                  </a>
                
                  
                  
                  
                  <a class="dropdown-item" target="_blank" rel="noopener" href="https://hexo.fluid-dev.com/docs/guide/">
                    
                    配置指南
                  </a>
                
                  
                  
                  
                  <a class="dropdown-item" target="_blank" rel="noopener" href="https://hexo.fluid-dev.com/docs/icon/">
                    
                    图标用法
                  </a>
                
              </div>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" data-toggle="modal" data-target="#modalSearch">&nbsp;<i
                class="iconfont icon-search"></i>&nbsp;</a>
          </li>
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" href="javascript:">&nbsp;<i
                class="iconfont icon-dark" id="color-toggle-icon"></i>&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

    <div class="banner intro-2" id="background" parallax=true
         style="background: url('/walker_sue/img/default.png') no-repeat center center;
           background-size: cover;">
      <div class="full-bg-img">
        <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
          <div class="container page-header text-center fade-in-up">
    <span class="h2" id="subtitle">
    
</span>




<div class="mt-3">
  
  
    <span class="post-meta">
      <i class="iconfont icon-date-fill" aria-hidden="true"></i>
      <time datetime="2021-07-03 16:20" pubdate>
        July 3, 2021 pm
      </time>
    </span>
  
</div>

<div class="mt-1">
  
    
    <span class="post-meta mr-2">
      <i class="iconfont icon-chart"></i>
      2.6k 字
    </span>
  

  
    
    <span class="post-meta mr-2">
      <i class="iconfont icon-clock-fill"></i>
      
      
      27
       分钟
    </span>
  

  
  
</div>


</div>

          
        </div>
      </div>
    </div>
  </header>

  <main>
    
      

<div class="container-fluid">
  <div class="row">
    <div class="d-none d-lg-block col-lg-2"></div>
    <div class="col-lg-8 nopadding-md">
      <div class="container nopadding-md" id="board-ctn">
        <div class="py-5" id="board">
          <article class="post-content mx-auto" id="post">
            <!-- SEO header -->
            <h1 style="display: none">商业智能与推荐系统</h1>
            
            <div class="markdown-body" id="post-body">
              <div align='center' ><font size='10'>机器学习-BI</font></div>


<hr>
<div align='center' ><font size='5'>Week_17</font></div>
<div align='center' ><font size='5'>商业智能与推荐系统</font></div>

<hr>
<h2 id="一、推荐系统"><a href="#一、推荐系统" class="headerlink" title="一、推荐系统"></a>一、推荐系统</h2><h3 id="什么是推荐系统"><a href="#什么是推荐系统" class="headerlink" title="什么是推荐系统"></a>什么是推荐系统</h3><p>推荐系统是一种 信息过滤 系统，根据用户的历史行为、社交关系、兴趣点给用户推荐适合他们的信息。<br></p>
<p>算法可以判断用户当前感兴趣的物品或内容。你也可以将它理解为一家只为你而开的商店。店铺里摆放的都是你需要的，或者适合你的商品。那么机器是如何帮你找到适合你的商品呢？这就要用到推荐系统，利用算法拟合用户数据，给用户推荐相关商品，类似于超市里的导购员，即可以给购物者推荐新商品，也可以帮助购物者找到商品的位置。推荐系统主要是前者，推荐商品。<br></p>
<p>推荐系统主要分为两种，一种是基于内容属性推荐（Content-based Filtering），根据物品的属性为他们打上标签，再通过这些标签计算他们之间的相似度；另外一种是基于其他用户行为推荐（Collaborative Filtering），协同过滤就是通过数据找到与你相似的用户，通过他们的行为和他们喜欢的内容。为你推荐你可能感兴趣的物品或内容。在日常生活中，我们也会找到兴趣相同的朋友来帮我们推荐电影或者音乐。<br></p>
<p><img src="01.png" srcset="/walker_sue/img/loading.gif"></p>
<p>在推荐系统中，Using data重在“相似度”，Solve problems在于“推荐”。物品本身：Content-based基于物品本身的内容，而不是用户购买/浏览物品的行为。用户行为的可以分为两种，显示反馈数据和隐形反馈数据。<br></p>
<p>显性反馈数据：用户明确表示对物品的喜欢行为：评分，喜欢，收藏，购买<br>隐性反馈数据：不能明确反映用户喜好的行为：浏览，停留时间，点击<br><br><img src="02.png" srcset="/walker_sue/img/loading.gif"></p>
<p>=&gt;冷启动问题：<br></p>
<ul>
<li>用户冷启动：新用户来的时候，如何推荐</li>
<li>物品冷启动：新的物品，如何推荐</li>
<li>系统冷启动：新的网站上线，如何推荐</li>
</ul>
<h3 id="Exploit-amp-Explore问题"><a href="#Exploit-amp-Explore问题" class="headerlink" title="Exploit&amp;Explore问题"></a>Exploit&amp;Explore问题</h3><ul>
<li>Exploitation：选择现在可能最佳的方案</li>
<li>Exploration：选择现在不确定的，但未来可能会有高效益的方案</li>
</ul>
<p><strong>1.Bandit 算法介绍</strong></p>
<p>Bandit 算法并不是指某一个算法，而是指某一类算法，想要比较不同 Bandit 算法之间的优劣，可以使用累积遗憾来衡量。累积遗憾的计算公式如下：<br></p>
<p>$$<br>R_t = \sum_{i=1}^T(W_{opt} - W_{B(i)})<br>$$</p>
<p>T表示总共的选择次数，RT 表示经过 T 次选择后的累积遗憾，Wopt表示在每次选择时选择了最好的臂所获得的收益，WBi 表示每次选择时实际所选的臂所带来的收益，两者的差就是当次的遗憾。<br></p>
<p>为了简化 MAB 问题，每个臂的收益不是 0，就是 1，也就是伯努利收益。<br></p>
<p>所以如果想要比较不同的 Bandit 在同一个 MAB 问题上的表现，只需要收集每个算法经过 T 次后的累积遗憾，累积遗憾越少，表示该算法效果越好。<br></p>
<p>Bandit 算法的套路就是：小心翼翼地试，越确定某个选择好，就多选择它，越确定某个选择差，就越来越少选择它。<br></p>
<p>如果某个选择实验次数较少，导致不确定好坏，那么就多给一些被选择机会，直到确定了它是金子还是石头。简单说就是，把选择的机会给“确定好的”和“还不确定的”。<br></p>
<p>Bandit 算法中有几个关键元素：臂，回报，环境。<br></p>
<ul>
<li>臂：指每次选择的候选项，有几个选项就有几个臂。</li>
<li>回报：就是选择一个臂之后得到的奖励，比如选择赌博机后吐出来的硬币。</li>
<li>环境：就是决定每个臂不同的那些因素，统称为环境。</li>
</ul>
<p>将以上的关键元素对应到推荐系统中。<br></p>
<ul>
<li>臂：指每次推荐的候选项，可以是具体物品，也可以是物品类别，也可以是推荐策略和算法。</li>
<li>回报：指用户对推荐的结果是否满意。</li>
<li>环境：指给当前用户推荐时的所有周边环境。</li>
</ul>
<p><strong>2.Bandit 算法需要注意的问题</strong></p>
<p>想要解决 EE 问题，可以使用 Bbandit 算法，但是使用 Bandit 算法需要注意一些问题，如果不考虑这些问题，直接在一些场景中使用 Bandit 算法，得到的结果可能会很差。需要注意的问题主要有两个：<br></p>
<ul>
<li>相对少量的优质物品</li>
<li>非常大的用户量</li>
</ul>
<p>在使用 Bandit 算法时，如果物品的质量良莠不齐，并且物品的数量较多，在曝光位置非常有限的情况下，优质资源想要尽快展示出来的可能性不高，因为这时候系统还无法对大多数物品还是不确定的态度，还需要做更多的探索（explore）<br></p>
<p>用户量如果小的话，无法产生大量的用户交互行为，算法无法快速收敛到稳定方案。另外，如果物品的质量差的话，用户的体验可能会很差，这样也会减少用户与物品的交互行为。<br></p>
<p>无论使用哪种 Bandit 算法，在短期内都会对用户的体验有一定的影响，所以需要注意减少这种影响。<br></p>
<p><img src="03.png" srcset="/walker_sue/img/loading.gif"></p>
<h3 id="推荐系统的评价指标有哪些"><a href="#推荐系统的评价指标有哪些" class="headerlink" title="推荐系统的评价指标有哪些"></a>推荐系统的评价指标有哪些</h3><p><img src="04.png" srcset="/walker_sue/img/loading.gif"></p>
<h3 id="推荐系统的架构"><a href="#推荐系统的架构" class="headerlink" title="推荐系统的架构"></a>推荐系统的架构</h3><ul>
<li>推荐系统是一种信息过滤系统<ul>
<li>A 数据源——item特征，用户画像，用户行为</li>
<li>B 召回阶段——粗筛，得到候选物品集</li>
<li>C 排序阶段——对多个召回通道的内容进行打分排序，选出最优的少量结果。兼顾推荐系统的多维度指标：覆盖率，多样性，新颖度</li>
</ul>
</li>
</ul>
<p><img src="05.png" srcset="/walker_sue/img/loading.gif"></p>
<p><img src="06.png" srcset="/walker_sue/img/loading.gif"></p>
<h3 id="推荐系统中的可解释性"><a href="#推荐系统中的可解释性" class="headerlink" title="推荐系统中的可解释性"></a>推荐系统中的可解释性</h3><p><img src="07.png" srcset="/walker_sue/img/loading.gif"></p>
<h2 id="二、信息流与推荐"><a href="#二、信息流与推荐" class="headerlink" title="二、信息流与推荐"></a>二、信息流与推荐</h2><h3 id="什么是CTR"><a href="#什么是CTR" class="headerlink" title="什么是CTR"></a>什么是CTR</h3><p>点击率 (CTR) 是指对移动广告推广活动展示的点击次数比值。CTR 的计算方法是将移动广告推广活动的点击次数除以展示总数量，再将结果用百分比的形式表示。<br></p>
<p>例如：一个公司投放的移动广告推广活动产生了 10000 次展示量，并在 App Store 中产生了 500 次点击量，则此次推广活动的 CTR 为 5%。<br></p>
<h3 id="CTR经典算法：GBDT-LR"><a href="#CTR经典算法：GBDT-LR" class="headerlink" title="CTR经典算法：GBDT + LR"></a>CTR经典算法：GBDT + LR</h3><p>2014年Facebook提出了基于GBDT+LR组合模型的解决方案。简而言之，Facebook提出了一种<strong>利用GBDT（Gradient Boosting Decision Tree）自动进行特征筛选和组合，进而生成新的离散特征向量</strong>，再把该特征向量当作LR模型输入，预估CTR的模型结构。随后Kaggle竞赛也有实践此思路，GBDT与LR融合开始引起了业界关注。<br></p>
<p>LR+GBDT相比于单纯的LR或者GBDT带来了较大的性能提升，论文中给出数据为3%，这在CTR预估领域确实非常不错。除此之外，Facebook还在在线学习、Data freshness、学习速率、树模型参数、特征重要度等方面进行了探索。<br></p>
<p><img src="08.png" srcset="/walker_sue/img/loading.gif"><br><img src="09.png" srcset="/walker_sue/img/loading.gif"><br><img src="10.png" srcset="/walker_sue/img/loading.gif"><br><img src="11.png" srcset="/walker_sue/img/loading.gif"></p>
<h3 id="GBDT使用"><a href="#GBDT使用" class="headerlink" title="GBDT使用"></a>GBDT使用</h3><pre><code class="hljs python"><span class="hljs-keyword">from</span> sklearn.ensemble <span class="hljs-keyword">import</span> GradientBoostingRegressor,GradientBoostingClassifier

GradientBoostingRegressor()  <span class="hljs-comment"># 构造函数</span>
n_estimators,弱学习器的最大迭代次数（弱学习器的个数），默认是<span class="hljs-number">100</span>
learning_rate: 学习率，默认是<span class="hljs-number">0.1</span>
loss: 选择损失函数，默认值为ls(least squres)
max_depth: 每一个学习器的最大深度，从而限制回归树的节点数目，默认为<span class="hljs-number">3</span>
min_samples_split: 可以划分为内部节点的最小样本数，默认为min_samples_leaf: 叶节点所需的最小样本数，默认为<span class="hljs-number">1</span></code></pre>

<h4 id="Thinking1-在CTR点击率预估中，使用GBDT-LR的原理是什么？能简要说明GBDT和LR在CTR预估中的作用（10point）"><a href="#Thinking1-在CTR点击率预估中，使用GBDT-LR的原理是什么？能简要说明GBDT和LR在CTR预估中的作用（10point）" class="headerlink" title="Thinking1.在CTR点击率预估中，使用GBDT+LR的原理是什么？能简要说明GBDT和LR在CTR预估中的作用（10point）"></a>Thinking1.在CTR点击率预估中，使用GBDT+LR的原理是什么？能简要说明GBDT和LR在CTR预估中的作用（10point）</h4><ul>
<li>以往的CTR预估采用LR模型，LR是线性模型，虽然速度较快，但是学习能力有限。通过GBDT+LR实现自动化特征+分类</li>
<li>通过GBDT将特征进行组合，然后传入给线性分类器</li>
<li>LR对GBDT产生的输入数据进行分类（使用L1正则化防止过拟合）</li>
</ul>
<h4 id="Thinking2-GBDT和随机森林都是基于树的算法，它们有什么区别？能简要说明这两种基于树的算法的不同（10points）"><a href="#Thinking2-GBDT和随机森林都是基于树的算法，它们有什么区别？能简要说明这两种基于树的算法的不同（10points）" class="headerlink" title="Thinking2.GBDT和随机森林都是基于树的算法，它们有什么区别？能简要说明这两种基于树的算法的不同（10points）"></a>Thinking2.GBDT和随机森林都是基于树的算法，它们有什么区别？能简要说明这两种基于树的算法的不同（10points）</h4><ul>
<li>1.随机森林采用的bagging思想，而GBDT采用的boosting思想。这两种方法都是Bootstrap思想的应用，Bootstrap是一种有放回的抽样方法思想。虽然都是有放回的抽样，但二者的区别在于：Bagging采用有放回的均匀取样，而Boosting根据错误率来取样（Boosting初始化时对每一个训练样例赋相等的权重1／n，然后用该算法对训练集训练t轮，每次训练后，对训练失败的样例赋以较大的权重），因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的，各训练集之间相互独立，弱分类器可并行，而Boosting的训练集的选择与前一轮的学习结果有关，是串行的。</li>
<li>2.组成随机森林的树可以是分类树，也可以是回归树；而GBDT只能由回归树组成。</li>
<li>3.组成随机森林的树可以并行生成；而GBDT只能是串行生成。</li>
<li>4.对于最终的输出结果而言，随机森林采用多数投票等；而GBDT则是将所有结果累加起来，或者加权累加起来。</li>
<li>5.随机森林对异常值不敏感；GBDT对异常值非常敏感。</li>
<li>6.随机森林对训练集一视同仁；GBDT是基于权值的弱分类器的集成。</li>
<li>7.随机森林是通过减少模型方差提高性能；GBDT是通过减少模型偏差提高性能。</li>
</ul>
<h3 id="参考资料："><a href="#参考资料：" class="headerlink" title="参考资料："></a>参考资料：</h3><ul>
<li><ol>
<li><a target="_blank" rel="noopener" href="https://zhuanlan.zhihu.com/p/76794626"># 推荐系统之ctr预估-LR与GBDT+LR模型解析</a></li>
</ol>
</li>
<li><ol start="2">
<li><a target="_blank" rel="noopener" href="https://blog.csdn.net/weixin_43849871/article/details/109545353"># BI学习心得01-商业智能与推荐系统</a></li>
</ol>
</li>
<li><ol start="3">
<li>[<a href="https://link.zhihu.com/?target=http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=51313D6762FBE110533EDFDD7A47A8D9?doi=10.1.1.134.395&rep=rep1&type=pdf">Predicting Clicks: Estimating the Click-Through Rate for New Ads</a>]</li>
</ol>
</li>
<li><ol start="3">
<li>[<a href="https://link.zhihu.com/?target=http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=A54CCA7D4A8F05B6636C9D64316BCF96?doi=10.1.1.718.9050&rep=rep1&type=pdf">Practical Lessons from Predicting Clicks on Ads at Facebook</a></li>
</ol>
</li>
</ul>
<pre><code class="hljs python"></code></pre>
            </div>
            <hr>
            <div>
              <div class="post-metas mb-3">
                
                  <div class="post-meta mr-3">
                    <i class="iconfont icon-category"></i>
                    
                      <a class="hover-with-bg" href="/walker_sue/categories/BI/">BI</a>
                    
                      <a class="hover-with-bg" href="/walker_sue/categories/BI/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/">机器学习</a>
                    
                      <a class="hover-with-bg" href="/walker_sue/categories/BI/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/%E6%8E%A8%E8%8D%90%E7%AE%97%E6%B3%95/">推荐算法</a>
                    
                  </div>
                
                
                  <div class="post-meta">
                    <i class="iconfont icon-tags"></i>
                    
                      <a class="hover-with-bg" href="/walker_sue/tags/BI/">BI</a>
                    
                      <a class="hover-with-bg" href="/walker_sue/tags/%E6%8E%A8%E8%8D%90%E7%AE%97%E6%B3%95/">推荐算法</a>
                    
                      <a class="hover-with-bg" href="/walker_sue/tags/GBDT/">GBDT</a>
                    
                  </div>
                
              </div>
              
                <p class="note note-warning">本博客所有文章除特别声明外，均采用 <a target="_blank" href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh" rel="nofollow noopener noopener">CC BY-SA 4.0 协议</a> ，转载请注明出处！</p>
              
              
                <div class="post-prevnext row">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/walker_sue/2021/07/09/week18-Apriori/">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">挖掘数据中的关联规则</span>
                        <span class="visible-mobile">Vorheriger</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/walker_sue/2021/06/25/week16-VRP/">
                        <span class="hidden-mobile">常见规划问题（四）</span>
                        <span class="visible-mobile">Nächster</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
          </article>
        </div>
      </div>
    </div>
    
      <div class="d-none d-lg-block col-lg-2 toc-container" id="toc-ctn">
        <div id="toc">
  <p class="toc-header"><i class="iconfont icon-list"></i>&nbsp;TOC</p>
  <div id="tocbot"></div>
</div>

      </div>
    
  </div>
</div>

<!-- Custom -->


    
  </main>

  
    <a id="scroll-top-button" href="#" role="button">
      <i class="iconfont icon-arrowup" aria-hidden="true"></i>
    </a>
  

  
    <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">Suchen</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v"
                 for="local-search-input">Stichwort</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>
  

  

  <footer class="text-center mt-5 py-3">
  <div class="footer-content">
     <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-love"></i> <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> 
  </div>
  

  

  
</footer>

<!-- SCRIPTS -->
<script  src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js" ></script>
<script  src="https://cdn.staticfile.org/twitter-bootstrap/4.4.1/js/bootstrap.min.js" ></script>
<script  src="/walker_sue/js/debouncer.js" ></script>
<script  src="/walker_sue/js/main.js" ></script>

<!-- Plugins -->


  
    <script  src="/walker_sue/js/lazyload.js" ></script>
  



  



  <script defer src="https://cdn.staticfile.org/clipboard.js/2.0.6/clipboard.min.js" ></script>
  <script  src="/walker_sue/js/clipboard-use.js" ></script>







  <script  src="https://cdn.staticfile.org/tocbot/4.11.1/tocbot.min.js" ></script>
  <script>
    $(document).ready(function () {
      var boardCtn = $('#board-ctn');
      var boardTop = boardCtn.offset().top;

      tocbot.init({
        tocSelector: '#tocbot',
        contentSelector: '#post-body',
        headingSelector: 'h1,h2,h3,h4,h5,h6',
        linkClass: 'tocbot-link',
        activeLinkClass: 'tocbot-active-link',
        listClass: 'tocbot-list',
        isCollapsedClass: 'tocbot-is-collapsed',
        collapsibleClass: 'tocbot-is-collapsible',
        collapseDepth: 0,
        scrollSmooth: true,
        headingsOffset: -boardTop
      });
      if ($('.toc-list-item').length > 0) {
        $('#toc').css('visibility', 'visible');
      }
    });
  </script>



  <script  src="https://cdn.staticfile.org/typed.js/2.0.11/typed.min.js" ></script>
  <script>
    function typing(id, title){
        var typed = new Typed('#' + id, {
            strings: [
              '  ',
              title + "&nbsp;",
            ],
            cursorChar: "_",
            typeSpeed: 70,
            loop: false,
        });
        typed.stop();
        $(document).ready(function () {
            $(".typed-cursor").addClass("h2");
            typed.start();
        });
    }
    
        typing("subtitle", "商业智能与推荐系统")
    
  </script>


  <script  src="https://cdn.staticfile.org/anchor-js/4.2.2/anchor.min.js" ></script>
  <script>
    anchors.options = {
      placement: "right",
      visible: "hover",
      
    };
    var el = "h1,h2,h3,h4,h5,h6".split(",");
    var res = [];
    for (item of el) {
      res.push(".markdown-body > " + item)
    }
    anchors.add(res.join(", "))
  </script>



  <script  src="/walker_sue/js/local-search.js" ></script>
  <script>
    var path = "/walker_sue/local-search.xml";
    var inputArea = document.querySelector("#local-search-input");
    inputArea.onclick = function () {
      searchFunc(path, 'local-search-input', 'local-search-result');
      this.onclick = null
    }
  </script>



  <script  src="https://cdn.staticfile.org/fancybox/3.5.7/jquery.fancybox.min.js" ></script>
  <link  rel="stylesheet" href="https://cdn.staticfile.org/fancybox/3.5.7/jquery.fancybox.min.css" />

  <script>
    $('#post img:not(.no-zoom img, img[no-zoom]), img[zoom]').each(
      function () {
        var element = document.createElement('a');
        $(element).attr('data-fancybox', 'images');
        $(element).attr('href', $(this).attr('src'));
        $(this).wrap(element);
      }
    );
  </script>





  

  
    <!-- MathJax -->
    <script>
      MathJax = {
        tex: {
          inlineMath: [['$', '$'], ['\\(', '\\)']]
        },
        options: {
          renderActions: {
            findScript: [10, doc => {
              document.querySelectorAll('script[type^="math/tex"]').forEach(node => {
                const display = !!node.type.match(/; *mode=display/);
                const math = new doc.options.MathItem(node.textContent, doc.inputJax[0], display);
                const text = document.createTextNode('');
                node.parentNode.replaceChild(text, node);
                math.start = { node: text, delim: '', n: 0 };
                math.end = { node: text, delim: '', n: 0 };
                doc.math.push(math);
              });
            }, '', false],
            insertedScript: [200, () => {
              document.querySelectorAll('mjx-container').forEach(node => {
                let target = node.parentNode;
                if (target.nodeName.toLowerCase() === 'li') {
                  target.parentNode.classList.add('has-jax');
                }
              });
            }, '', false]
          }
        }
      };
    </script>

    <script async src="https://cdn.staticfile.org/mathjax/3.0.5/es5/tex-svg.js" ></script>

  











</body>
</html>
